// -----------------------------------------------------------------------------
// M A R I T I M E   R E S E A R C H   I N S T I T U T E   N E T H E R L A N D S
// -----------------------------------------------------------------------------
// Copyright (C) December 17, 2009 MARIN - All rights reserved - http://www.marin.nl
// -----------------------------------------------------------------------------
// Program  :
// Module   :
// File     : Pulse.h
// -----------------------------------------------------------------------------

#ifndef PULSE_H
#define	PULSE_H

#include "defines.h"
#include "Array2D.h"

// -----------------------------------------------------------------------------
// class Pulse
// -----------------------------------------------------------------------------
/// short description
/** long description */
// -----------------------------------------------------------------------------
class Pulse // interface class
{
    
public:

    Pulse(double dx, double dy);

    virtual ~Pulse() {}
    
    REAL getStartTime() const;
    
    void setStartTime(REAL time);
    
    virtual void compute(int *px, int *py, Array2D<REAL>* pPulse) = 0;

protected:

    double m_dx;               ///< e-w grid spacing
    double m_dy;               ///< n-s grid spacing
    double m_invertedCellArea; ///< inverse of area of one grid cell
    REAL m_starttime;          ///< time of lowering pulse in water

private:

    Pulse(const Pulse& a_other);
    Pulse & operator=(const Pulse& a_other);
};

#endif // PULSE_H

